#ifndef __ARRANGEMENT_H__

#define __ARRANGEMENT_H__

#include <CGAL/Cartesian.h>
#include <CGAL/Quotient.h>
#include <CGAL/MP_Float.h>
#include <CGAL/CORE_algebraic_number_traits.h>
#include <CGAL/Arr_polycurve_traits_2.h>
#include <CGAL/Arr_conic_traits_2.h>
#include <CGAL/Arrangement_2.h>



typedef CGAL::CORE_algebraic_number_traits									Nt_Traits;
typedef Nt_Traits::Rational													Rational;
typedef Nt_Traits::Algebraic												Algebraic;
typedef CGAL::Cartesian<Rational>											Rat_kenel;
typedef CGAL::Cartesian<Algebraic>											Alg_kernel;
typedef CGAL::Arr_conic_traits_2<Rat_kenel, Alg_kernel, Nt_Traits>			Conic_Traits_2;
typedef Conic_Traits_2::Point_2												Conic_Point_2;
typedef Conic_Traits_2::Curve_2												Conic_Curve_2;
typedef Conic_Traits_2::X_monotone_curve_2									Conic_x_monotone_curve_2;
typedef CGAL::Arr_polycurve_traits_2<Conic_Traits_2>						Polycurve_conic_traits_2;
typedef Polycurve_conic_traits_2::X_monotone_curve_2						X_monotone_PolyCurve;
typedef Polycurve_conic_traits_2::Curve_2									Polycurve;
typedef CGAL::Arrangement_2<Polycurve_conic_traits_2>						Polycurve_conic_arrangement;


enum ArrangementDrawType
{
	DRAW_INNER = 1,
	DRAW_OUTER = 2,
	DRAW_ALL = 3
};

void draw_arrangement(const Polycurve_conic_arrangement& arr, ArrangementDrawType DrawType = DRAW_ALL);




#endif // !__ARRANGEMENT_H__

